# main.py
import os
import json
from core.aigc_integration import CozeAssistant, DEEPSEEKAssistant, DashscopeAssistant
from core.test_generator import SmartTestGenerator
from core.test_runner import AdaptiveTestRunner
from core.report_analyzer import SmartReportAnalyzer
from config.settings import Settings


def main():
    # 根据配置选择使用哪个AIGC提供商
    aigc_provider = Settings.AIGC_PROVIDER.lower()

    if aigc_provider == "coze":
        aigc_assistant = CozeAssistant()
    elif aigc_provider == "deepseek":
        aigc_assistant = DEEPSEEKAssistant()
    elif aigc_provider == "dashscope":
        aigc_assistant = DashscopeAssistant()
    else:
        raise ValueError(f"Unsupported AIGC provider: {Settings.AIGC_PROVIDER}")

    # 初始化组件 - 使用统一的AIGC助手
    test_generator = SmartTestGenerator(coze_assistant=aigc_assistant)
    test_runner = AdaptiveTestRunner(coze_assistant=aigc_assistant)
    report_analyzer = SmartReportAnalyzer(coze_assistant=aigc_assistant)

    print("\n" + "=" * 50)
    print(f"🚀 Python + {aigc_provider.capitalize()} + Pytest 智能测试框架")
    print(f"{aigc_provider.capitalize()} API Key: {'Set' if aigc_assistant.api_key != f'your_{aigc_provider}_api_key_here' else 'Not Set'}")
    print(f"默认测试路径: {Settings.DEFAULT_TEST_PATH}")
    print("=" * 50 + "\n")

    # 示例：生成登录功能测试
    login_feature = """
    用户登录功能：
    - 用户输入邮箱和密码
    """
    test_generator.generate_pytest_file(login_feature, "test_login.py")

    # # 示例：生成支付功能测试
    # payment_nl = """
    # 测试支付功能：
    # - 用户选择商品并进入支付页面
    # - 输入信用卡信息（卡号、有效期、CVV）
    # - 验证卡号格式（Luhn算法）
    # - 提交支付请求
    # - 验证支付成功后的订单状态
    # - 测试支付失败场景（如余额不足、卡号无效）
    # """
    # test_generator.generate_from_natural_language(payment_nl, "test_payment.py")

    # 执行测试
    print("\n" + "=" * 50)
    print("🔧 开始执行测试")
    print("=" * 50 + "\n")
    test_results = test_runner.run_tests(adaptive=True, max_adaptive_cycles=2)

    # 分析测试结果
    print("\n" + "=" * 50)
    print("📊 分析测试结果")
    print("=" * 50 + "\n")
    analysis = report_analyzer.analyze_report(Settings.TEST_RESULTS_FILE)

    # 保存分析结果
    analysis_file = Settings.REPORTS_DIR / "test_analysis.json"
    with open(analysis_file, 'w') as f:
        json.dump(analysis, f, indent=2)
    print(f"✅ 分析结果已保存: {analysis_file}")

    # 生成可视化报告
    print("\n" + "=" * 50)
    print("📈 生成可视化报告")
    print("=" * 50 + "\n")
    report_analyzer.save_visual_report(analysis, test_results)

    print("\n" + "=" * 50)
    print(f"🏁 测试流程完成! 最终报告: {Settings.FINAL_REPORT_FILE}")
    print("=" * 50)


if __name__ == "__main__":
    main()
